#include "simple/support/meta/reconstruct.hpp"
#include "simple/support/meta/list.hpp"

#include <type_traits>

using namespace simple::support;

template <typename T>
struct double_float { using type = meta::list<T>; };
template <> struct double_float<double> { using type = meta::list<float, float>; };

int main()
{
	static_assert(std::is_same_v<
		meta::reconstruct_t<meta::list<int, double, char>, double_float>,
		meta::list<int, float, float, char>
	>);

	static_assert(std::is_same_v<
		meta::reconstruct_t<meta::list<double, meta::list<int, double, char>, bool>,
			double_float>,
		meta::list<float, float, meta::list<int, double, char>, bool>
	>);
	return 0;
}
